package br.com.designless.view.servlet;

import br.com.designless.business.facade.FutibaManagerFacadeRemote;
import br.com.designless.view.helper.JogosHelper;
import java.io.IOException;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.designless.business.model.Jogos;
import br.com.designless.business.model.Locais;
import br.com.designless.business.model.Usuarios;
import br.com.designless.view.Util.Util;
import br.com.designless.view.helper.UsuarioHelper;

/**
 *
 * @author diogenes.feijo
 */
public class JogosServlet extends HttpServlet {

    @EJB
    private FutibaManagerFacadeRemote futibaManagerFacade;

    private JogosHelper jogosHelper = new JogosHelper();
    private UsuarioHelper usuarioHelper  = new UsuarioHelper();

    private void processarRequisicao(HttpServletRequest request,
                                     HttpServletResponse response) throws ServletException,
                                                                          IOException {
        
        String acao = request.getParameter("acao");
        
        String forward = JogosHelper.FORWARD_JOGOS;
        List<Jogos> listaJogos = futibaManagerFacade.buscarJogosAtuais();

        String idJogo = request.getParameter("id");
        Jogos jogo = null;

        if (idJogo != null && idJogo.trim().length() > 0) {
            jogo = futibaManagerFacade.buscarJogo(new Integer(idJogo));
        }

        Usuarios usuario = usuarioHelper.getUsuarioSessao(request);
        
        if (JogosHelper.ACAO_LISTAR_HISTORICO.equals(acao)) {
            listaJogos = futibaManagerFacade.buscarJogosHistorico();

            request.setAttribute("historico", true);
        } else if (JogosHelper.ACAO_VER_JOGO.equals(acao)) {
            forward = JogosHelper.FORWARD_JOGO;
        } else if (JogosHelper.ACAO_PARTICIPAR.equals(acao)) {
            jogo.getUsuarios().add(usuario);

            futibaManagerFacade.cadastrarJogo(jogo);

            futibaManagerFacade.enviarEmailConfirmacaoParticipacaoJogo(usuario, jogo);

            Util.mostrarMensagemSucesso(request, "Participação confirmada com sucesso");

            forward = JogosHelper.FORWARD_JOGO;
        } else if (JogosHelper.ACAO_CANCELAR_PARTICIPACAO.equals(acao)) {
            jogo.getUsuarios().remove(usuario);

            futibaManagerFacade.cadastrarJogo(jogo);

            Util.mostrarMensagemSucesso(request, "Participação cancelada com sucesso");

            forward = JogosHelper.FORWARD_JOGO;
        } else if (JogosHelper.ACAO_CADASTRO_JOGO.equals(acao)) {
            List<Usuarios> listaConvidados = futibaManagerFacade.buscarUsuarios();
            List<Locais> listaLocais = futibaManagerFacade.buscarLocais();

            request.setAttribute("listaConvidados", listaConvidados);
            request.setAttribute("listaLocais", listaLocais);

            forward = JogosHelper.FORWARD_CADASTRO_JOGO;
        } else if (JogosHelper.ACAO_CADASTRAR_JOGO.equals(acao)) {
            jogo = jogosHelper.carregarJogo(request, jogo);

            jogo = futibaManagerFacade.cadastrarJogo(jogo);

            String[] emailsConvidados = request.getParameterValues("emailsConvidados");

            futibaManagerFacade.enviarEmailConviteParticipacaoJogo(emailsConvidados, jogo);

            listaJogos = futibaManagerFacade.buscarJogosAtuais();

            forward = JogosHelper.FORWARD_LISTAGEM_JOGOS;
        } else if (JogosHelper.ACAO_LISTAR_JOGOS.equals(acao)) {
            listaJogos = futibaManagerFacade.buscarJogos();

            forward = JogosHelper.FORWARD_LISTAGEM_JOGOS;
        } else if (JogosHelper.ACAO_EDITAR_JOGO.equals(acao)) {
            List<Usuarios> listaConvidados = futibaManagerFacade.buscarUsuarios();
            List<Locais> listaLocais = futibaManagerFacade.buscarLocais();

            request.setAttribute("listaConvidados", listaConvidados);
            request.setAttribute("listaLocais", listaLocais);
            
            forward = JogosHelper.FORWARD_CADASTRO_JOGO;
        } else if (JogosHelper.ACAO_EXCLUIR_JOGO.equals(acao)) {
            futibaManagerFacade.excluirJogo(jogo);
            listaJogos = futibaManagerFacade.buscarJogos();

            Util.mostrarMensagemSucesso(request, "Jogo excluído com sucesso");

            forward = JogosHelper.FORWARD_LISTAGEM_JOGOS;
        } else if (JogosHelper.ACAO_LISTAR_LOCAIS.equals(acao)) {
            List<Locais> listaLocais = futibaManagerFacade.buscarLocais();

            request.setAttribute("listaLocais", listaLocais);

            forward = JogosHelper.FORWARD_LISTAGEM_LOCAIS;
        } else if (JogosHelper.ACAO_CADASTRO_LOCAL.equals(acao)) {
            forward = JogosHelper.FORWARD_CADASTRO_LOCAL;
        } else if (JogosHelper.ACAO_CADASTRAR_LOCAL.equals(acao)) {
            String idLocal = request.getParameter("idLocal");
            Locais local = null;

            if (idLocal != null && idLocal.trim().length() > 0) {
                local = futibaManagerFacade.buscarLocal(new Integer(idLocal));
            }

            local = jogosHelper.carregarLocal(request, local);

            futibaManagerFacade.cadastrarLocal(local);

            List<Locais> listaLocais = futibaManagerFacade.buscarLocais();

            request.setAttribute("listaLocais", listaLocais);

            forward = JogosHelper.FORWARD_LISTAGEM_LOCAIS;
        }  else if (JogosHelper.ACAO_EXCLUIR_LOCAL.equals(acao)) {
            String idLocal = request.getParameter("idLocal");
            Locais local = null;

            if (idLocal != null && idLocal.trim().length() > 0) {
                local = futibaManagerFacade.buscarLocal(new Integer(idLocal));
            }

            futibaManagerFacade.excluirLocal(local);

            List<Locais> listaLocais = futibaManagerFacade.buscarLocais();
            
            request.setAttribute("listaLocais", listaLocais);

            Util.mostrarMensagemSucesso(request, "Local de Jogo excluído com sucesso");

            forward = JogosHelper.FORWARD_LISTAGEM_LOCAIS;
        }  else if (JogosHelper.ACAO_EDITAR_LOCAL.equals(acao)) {
            String idLocal = request.getParameter("idLocal");
            Locais local = null;

            if (idLocal != null && idLocal.trim().length() > 0) {
                local = futibaManagerFacade.buscarLocal(new Integer(idLocal));
            }

            request.setAttribute("local", local);

            forward = JogosHelper.FORWARD_CADASTRO_LOCAL;
        }

        request.setAttribute("listaJogos", listaJogos);
        request.setAttribute("jogo", jogo);

        Util.encaminharRequisicao(request, response, forward);
    }


    @Override
    protected void doGet(HttpServletRequest request, 
                         HttpServletResponse response) throws ServletException, IOException {

        processarRequisicao(request, response);
    } 

    @Override
    protected void doPost(HttpServletRequest request, 
                          HttpServletResponse response) throws ServletException, IOException {

        processarRequisicao(request, response);
    }
    
}